//go:build ignore

package main

import "fmt"

func main() {
	/*
		// 切片上下界默认值0-[size-1]
		var a = [6]int{1, 2, 3, 4, 5, 6}
		s := a[:]
		fmt.Println(s)
		s = a[:3]
		fmt.Println(s)
		s = a[1:5]
		fmt.Println(s)*/

	// demo2 切片长度和容量
	/*sls := []int{2, 4, 6, 8, 10, 12}
	printSlice(sls)
	// 截取切片,使其长度等于0
	sls = sls[:0]
	printSlice(sls)
	// 扩展其长度
	sls = sls[:4]
	printSlice(sls)
	// 去除前2个元素
	sls = sls[2:]
	printSlice(sls)*/

	/*
		// demo3 ,make 函数创建切片
		demo3 := make([]int, 6)
		printSlice(demo3)
		// len(demo31)=0, cap(demo31)=6
		demo31 := make([]int, 0, 6)
		demo31 = []int{1, 2, 3, 4, 5, 6}
		printSlice(demo31)
		demo32 := demo31[:2]
		printSlice(demo32)
		demo33 := demo31[2:]
		printSlice(demo33)*/

	// demo4 slice append 操作会按需增长,返回一个更长的数组的地址引用
	// 追加函数: func append(s []T, vs ...T) []T
	var s []int
	// 空切片
	printSlice(s)
	// 可以直接在空切片上追加
	s = append(s, 0)
	printSlice(s)
	// 切片可以按需增长
	s = append(s, 1)
	printSlice(s)
	// 切片可以一次追加多个,可变参数
	s = append(s, 2, 3, 4, 5, 6)
	printSlice(s)

}

func printSlice(s []int) {
	fmt.Printf("len=%d, cap=%d, %v \n", len(s), cap(s), s)
}
